package com.algorithm.learning.base.动态规划;

/**
 * @program: algorithm-learning
 * @description:
 * @author: YuKai Fan
 * @create: 2024/9/3 22:16
 **/
public class 范围上尝试的模型 {

    public static int win1(int[] arr) {
        if (arr == null || arr.length == 0) {
            return 0;
        }
        // 从先手和后手的情况下，选一个最大的分数
        return Math.max(f(arr, 0, arr.length - 1), s(arr, 0, arr.length - 1));
    }

    /**
     * 先手函数
     * @param arr
     * @param L
     * @param R
     * @return
     */
    public static int f(int[] arr, int L, int R) {
        if (L == R) {
            return arr[L];
        }
        return Math.max(arr[L] + s(arr, L + 1, R), arr[R] + s(arr, L, R-1 ));
    }

    /**
     * 后手函数
     * @param arr
     * @param L
     * @param R
     * @return
     */
    private static int s(int[] arr, int L, int R) {
        if (L == R) {
            return 0;
        }
        // 这里需要解释下
        //
        return Math.min(
                f(arr, L + 1, R),
                f(arr, L, R - 1)
        );
    }

}